home *** CD-ROM | disk | FTP | other *** search
/ Acorn User: China / Acorn User China CD-ROM (UK) (Disc A) / Acorn User China CD-ROM (UK) (Disc A).bin / DEMON / GNU / DIFFDIST.ARC / diffdocs / diff.info-3 < prev    next >
Encoding:
GNU Info File  |  1994-10-01  |  46.0 KB  |  1,328 lines

  1. This is Info file diff.info, produced by Makeinfo-1.55 from the input
  2. file ./diff.texi.
  3.  
  4.    This file documents the the GNU `diff', `diff3', `sdiff', and `cmp'
  5. commands for showing the differences between text files and the `patch'
  6. command for using their output to update files.
  7.  
  8.    Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
  9.  
  10.    Permission is granted to make and distribute verbatim copies of this
  11. manual provided the copyright notice and this permission notice are
  12. preserved on all copies.
  13.  
  14.    Permission is granted to copy and distribute modified versions of
  15. this manual under the conditions for verbatim copying, provided that
  16. the entire resulting derived work is distributed under the terms of a
  17. permission notice identical to this one.
  18.  
  19.    Permission is granted to copy and distribute translations of this
  20. manual into another language, under the above conditions for modified
  21. versions, except that this permission notice may be stated in a
  22. translation approved by the Foundation.
  23.  
  24. 
  25. File: diff.info,  Node: Making Patches,  Next: Invoking cmp,  Prev: Merging with patch,  Up: Top
  26.  
  27. Tips for Making Patch Distributions
  28. ***********************************
  29.  
  30.    Here are some things you should keep in mind if you are going to
  31. distribute patches for updating a software package.
  32.  
  33.    Make sure you have specified the file names correctly, either in a
  34. context diff header or with an `Index:' line.  If you are patching
  35. files in a subdirectory, be sure to tell the patch user to specify a
  36. `-p' or `--strip' option as needed.  Take care to not send out reversed
  37. patches, since these make people wonder whether they have already
  38. applied the patch.
  39.  
  40.    To save people from partially applying a patch before other patches
  41. that should have gone before it, you can make the first patch in the
  42. patch file update a file with a name like `patchlevel.h' or
  43. `version.c', which contains a patch level or version number.  If the
  44. input file contains the wrong version number, `patch' will complain
  45. immediately.
  46.  
  47.    An even clearer way to prevent this problem is to put a `Prereq:'
  48. line before the patch.  If the leading text in the patch file contains a
  49. line that starts with `Prereq:', `patch' takes the next word from that
  50. line (normally a version number) and checks whether the next input file
  51. contains that word, preceded and followed by either white space or a
  52. newline.  If not, `patch' prompts you for confirmation before
  53. proceeding.  This makes it difficult to accidentally apply patches in
  54. the wrong order.
  55.  
  56.    Since `patch' does not handle incomplete lines properly, make sure
  57. that all the source files in your program end with a newline whenever
  58. you release a version.
  59.  
  60.    To create a patch that changes an older version of a package into a
  61. newer version, first make a copy of the older version in a scratch
  62. directory.  Typically you do that by unpacking a `tar' or `shar'
  63. archive of the older version.
  64.  
  65.    You might be able to reduce the size of the patch by renaming or
  66. removing some files before making the patch.  If the older version of
  67. the package contains any files that the newer version does not, or if
  68. any files have been renamed between the two versions, make a list of
  69. `rm' and `mv' commands for the user to execute in the old version
  70. directory before applying the patch.  Then run those commands yourself
  71. in the scratch directory.
  72.  
  73.    If there are any files that you don't need to include in the patch
  74. because they can easily be rebuilt from other files (for example,
  75. `TAGS' and output from `yacc' and `makeinfo'), replace the versions in
  76. the scratch directory with the newer versions, using `rm' and `ln' or
  77. `cp'.
  78.  
  79.    Now you can create the patch.  The de-facto standard `diff' format
  80. for patch distributions is context format with two lines of context,
  81. produced by giving `diff' the `-C 2' option.  Do not use less than two
  82. lines of context, because `patch' typically needs at least two lines
  83. for proper operation.  Give `diff' the `-P' option in case the newer
  84. version of the package contains any files that the older one does not.
  85. Make sure to specify the scratch directory first and the newer
  86. directory second.
  87.  
  88.    Add to the top of the patch a note telling the user any `rm' and
  89. `mv' commands to run before applying the patch.  Then you can remove
  90. the scratch directory.
  91.  
  92. 
  93. File: diff.info,  Node: Invoking cmp,  Next: Invoking diff,  Prev: Making Patches,  Up: Top
  94.  
  95. Invoking `cmp'
  96. **************
  97.  
  98.    The `cmp' command compares two files, and if they differ, tells the
  99. first byte and line number where they differ.  Its arguments are as
  100. follows:
  101.  
  102.      cmp OPTIONS... FROM-FILE [TO-FILE]
  103.  
  104.    The file name `-' is always the standard input.  `cmp' also uses the
  105. standard input if one file name is omitted.
  106.  
  107.    An exit status of 0 means no differences were found, 1 means some
  108. differences were found, and 2 means trouble.
  109.  
  110. * Menu:
  111.  
  112. * cmp Options::        Summary of options to `cmp'.
  113.  
  114. 
  115. File: diff.info,  Node: cmp Options,  Up: Invoking cmp
  116.  
  117. Options to `cmp'
  118. ================
  119.  
  120.    Below is a summary of all of the options that GNU `cmp' accepts.
  121. Most options have two equivalent names, one of which is a single letter
  122. preceded by `-', and the other of which is a long name preceded by
  123. `--'.  Multiple single letter options (unless they take an argument)
  124. can be combined into a single command line word: `-cl' is equivalent to
  125. `-c -l'.
  126.  
  127. `-c'
  128.      Print the differing characters.  Display control characters as a
  129.      `^' followed by a letter of the alphabet and precede characters
  130.      that have the high bit set with `M-' (which stands for "meta").
  131.  
  132. `--ignore-initial=BYTES'
  133.      Ignore any differences in the the first BYTES bytes of the input
  134.      files.  Treat files with fewer than BYTES bytes as if they are
  135.      empty.
  136.  
  137. `-l'
  138.      Print the (decimal) offsets and (octal) values of all differing
  139.      bytes.
  140.  
  141. `--print-chars'
  142.      Print the differing characters.  Display control characters as a
  143.      `^' followed by a letter of the alphabet and precede characters
  144.      that have the high bit set with `M-' (which stands for "meta").
  145.  
  146. `--quiet'
  147. `-s'
  148. `--silent'
  149.      Do not print anything; only return an exit status indicating
  150.      whether the files differ.
  151.  
  152. `--verbose'
  153.      Print the (decimal) offsets and (octal) values of all differing
  154.      bytes.
  155.  
  156. `-v'
  157. `--version'
  158.      Output the version number of `cmp'.
  159.  
  160. 
  161. File: diff.info,  Node: Invoking diff,  Next: Invoking diff3,  Prev: Invoking cmp,  Up: Top
  162.  
  163. Invoking `diff'
  164. ***************
  165.  
  166.    The format for running the `diff' command is:
  167.  
  168.      diff OPTIONS... FROM-FILE TO-FILE
  169.  
  170.    In the simplest case, `diff' compares the contents of the two files
  171. FROM-FILE and TO-FILE.  A file name of `-' stands for text read from
  172. the standard input.  As a special case, `diff - -' compares a copy of
  173. standard input to itself.
  174.  
  175.    If FROM-FILE is a directory and TO-FILE is not, `diff' compares the
  176. file in FROM-FILE whose file name is that of TO-FILE, and vice versa.
  177. The non-directory file must not be `-'.
  178.  
  179.    If both FROM-FILE and TO-FILE are directories, `diff' compares
  180. corresponding files in both directories, in alphabetical order; this
  181. comparison is not recursive unless the `-r' or `--recursive' option is
  182. given.  `diff' never compares the actual contents of a directory as if
  183. it were a file.  The file that is fully specified may not be standard
  184. input, because standard input is nameless and the notion of "file with
  185. the same name" does not apply.
  186.  
  187.    `diff' options begin with `-', so normally FROM-FILE and TO-FILE may
  188. not begin with `-'.  However, `--' as an argument by itself treats the
  189. remaining arguments as file names even if they begin with `-'.
  190.  
  191.    An exit status of 0 means no differences were found, 1 means some
  192. differences were found, and 2 means trouble.
  193.  
  194. * Menu:
  195.  
  196. * diff Options::    Summary of options to `diff'.
  197.  
  198. 
  199. File: diff.info,  Node: diff Options,  Up: Invoking diff
  200.  
  201. Options to `diff'
  202. =================
  203.  
  204.    Below is a summary of all of the options that GNU `diff' accepts.
  205. Most options have two equivalent names, one of which is a single letter
  206. preceded by `-', and the other of which is a long name preceded by
  207. `--'.  Multiple single letter options (unless they take an argument)
  208. can be combined into a single command line word: `-ac' is equivalent to
  209. `-a -c'.  Long named options can be abbreviated to any unique prefix of
  210. their name.  Brackets ([ and ]) indicate that an option takes an
  211. optional argument.
  212.  
  213. `-LINES'
  214.      Show LINES (an integer) lines of context.  This option does not
  215.      specify an output format by itself; it has no effect unless it is
  216.      combined with `-c' (*note Context Format::.) or `-u' (*note
  217.      Unified Format::.).  This option is obsolete.  For proper
  218.      operation, `patch' typically needs at least two lines of context.
  219.  
  220. `-a'
  221.      Treat all files as text and compare them line-by-line, even if they
  222.      do not seem to be text.  *Note Binary::.
  223.  
  224. `-b'
  225.      Ignore changes in amount of white space.  *Note White Space::.
  226.  
  227. `-B'
  228.      Ignore changes that just insert or delete blank lines.  *Note
  229.      Blank Lines::.
  230.  
  231. `--binary'
  232.      Read and write data in binary mode.  *Note Binary::.
  233.  
  234. `--brief'
  235.      Report only whether the files differ, not the details of the
  236.      differences.  *Note Brief::.
  237.  
  238. `-c'
  239.      Use the context output format.  *Note Context Format::.
  240.  
  241. `-C LINES'
  242. `--context[=LINES]'
  243.      Use the context output format, showing LINES (an integer) lines of
  244.      context, or three if LINES is not given.  *Note Context Format::.
  245.      For proper operation, `patch' typically needs at least two lines of
  246.      context.
  247.  
  248. `--changed-group-format=FORMAT'
  249.      Use FORMAT to output a line group containing differing lines from
  250.      both files in if-then-else format.  *Note Line Group Formats::.
  251.  
  252. `-d'
  253.      Change the algorithm perhaps find a smaller set of changes.  This
  254.      makes `diff' slower (sometimes much slower).  *Note diff
  255.      Performance::.
  256.  
  257. `-D NAME'
  258.      Make merged `#ifdef' format output, conditional on the preprocessor
  259.      macro NAME.  *Note If-then-else::.
  260.  
  261. `-e'
  262. `--ed'
  263.      Make output that is a valid `ed' script.  *Note ed Scripts::.
  264.  
  265. `--exclude=PATTERN'
  266.      When comparing directories, ignore files and subdirectories whose
  267.      basenames match PATTERN.  *Note Comparing Directories::.
  268.  
  269. `--exclude-from=FILE'
  270.      When comparing directories, ignore files and subdirectories whose
  271.      basenames match any pattern contained in FILE.  *Note Comparing
  272.      Directories::.
  273.  
  274. `--expand-tabs'
  275.      Expand tabs to spaces in the output, to preserve the alignment of
  276.      tabs in the input files.  *Note Tabs::.
  277.  
  278. `-f'
  279.      Make output that looks vaguely like an `ed' script but has changes
  280.      in the order they appear in the file.  *Note Forward ed::.
  281.  
  282. `-F REGEXP'
  283.      In context and unified format, for each hunk of differences, show
  284.      some of the last preceding line that matches REGEXP.  *Note
  285.      Specified Headings::.
  286.  
  287. `--forward-ed'
  288.      Make output that looks vaguely like an `ed' script but has changes
  289.      in the order they appear in the file.  *Note Forward ed::.
  290.  
  291. `-h'
  292.      This option currently has no effect; it is present for Unix
  293.      compatibility.
  294.  
  295. `-H'
  296.      Use heuristics to speed handling of large files that have numerous
  297.      scattered small changes.  *Note diff Performance::.
  298.  
  299. `--horizon-lines=LINES'
  300.      Do not discard the last LINES lines of the common prefix and the
  301.      first LINES lines of the common suffix.  *Note diff Performance::.
  302.  
  303. `-i'
  304.      Ignore changes in case; consider upper- and lower-case letters
  305.      equivalent.  *Note Case Folding::.
  306.  
  307. `-I REGEXP'
  308.      Ignore changes that just insert or delete lines that match REGEXP.
  309.      *Note Specified Folding::.
  310.  
  311. `--ifdef=NAME'
  312.      Make merged if-then-else output using NAME.  *Note If-then-else::.
  313.  
  314. `--ignore-all-space'
  315.      Ignore white space when comparing lines.  *Note White Space::.
  316.  
  317. `--ignore-blank-lines'
  318.      Ignore changes that just insert or delete blank lines.  *Note
  319.      Blank Lines::.
  320.  
  321. `--ignore-case'
  322.      Ignore changes in case; consider upper- and lower-case to be the
  323.      same.  *Note Case Folding::.
  324.  
  325. `--ignore-matching-lines=REGEXP'
  326.      Ignore changes that just insert or delete lines that match REGEXP.
  327.      *Note Specified Folding::.
  328.  
  329. `--ignore-space-change'
  330.      Ignore changes in amount of white space.  *Note White Space::.
  331.  
  332. `--initial-tab'
  333.      Output a tab rather than a space before the text of a line in
  334.      normal or context format.  This causes the alignment of tabs in
  335.      the line to look normal.  *Note Tabs::.
  336.  
  337. `-l'
  338.      Pass the output through `pr' to paginate it.  *Note Pagination::.
  339.  
  340. `-L LABEL'
  341.      Use LABEL instead of the file name in the context format (*note
  342.      Context Format::.) and unified format (*note Unified Format::.)
  343.      headers.  *Note RCS::.
  344.  
  345. `--label=LABEL'
  346.      Use LABEL instead of the file name in the context format (*note
  347.      Context Format::.) and unified format (*note Unified Format::.)
  348.      headers.
  349.  
  350. `--left-column'
  351.      Print only the left column of two common lines in side by side
  352.      format.  *Note Side by Side Format::.
  353.  
  354. `--line-format=FORMAT'
  355.      Use FORMAT to output all input lines in if-then-else format.
  356.      *Note Line Formats::.
  357.  
  358. `--minimal'
  359.      Change the algorithm to perhaps find a smaller set of changes.
  360.      This makes `diff' slower (sometimes much slower).  *Note diff
  361.      Performance::.
  362.  
  363. `-n'
  364.      Output RCS-format diffs; like `-f' except that each command
  365.      specifies the number of lines affected.  *Note RCS::.
  366.  
  367. `-N'
  368. `--new-file'
  369.      In directory comparison, if a file is found in only one directory,
  370.      treat it as present but empty in the other directory.  *Note
  371.      Comparing Directories::.
  372.  
  373. `--new-group-format=FORMAT'
  374.      Use FORMAT to output a group of lines taken from just the second
  375.      file in if-then-else format.  *Note Line Group Formats::.
  376.  
  377. `--new-line-format=FORMAT'
  378.      Use FORMAT to output a line taken from just the second file in
  379.      if-then-else format.  *Note Line Formats::.
  380.  
  381. `--old-group-format=FORMAT'
  382.      Use FORMAT to output a group of lines taken from just the first
  383.      file in if-then-else format.  *Note Line Group Formats::.
  384.  
  385. `--old-line-format=FORMAT'
  386.      Use FORMAT to output a line taken from just the first file in
  387.      if-then-else format.  *Note Line Formats::.
  388.  
  389. `-p'
  390.      Show which C function each change is in.  *Note C Function
  391.      Headings::.
  392.  
  393. `-P'
  394.      When comparing directories, if a file appears only in the second
  395.      directory of the two, treat it as present but empty in the other.
  396.      *Note Comparing Directories::.
  397.  
  398. `--paginate'
  399.      Pass the output through `pr' to paginate it.  *Note Pagination::.
  400.  
  401. `-q'
  402.      Report only whether the files differ, not the details of the
  403.      differences.  *Note Brief::.
  404.  
  405. `-r'
  406.      When comparing directories, recursively compare any subdirectories
  407.      found.  *Note Comparing Directories::.
  408.  
  409. `--rcs'
  410.      Output RCS-format diffs; like `-f' except that each command
  411.      specifies the number of lines affected.  *Note RCS::.
  412.  
  413. `--recursive'
  414.      When comparing directories, recursively compare any subdirectories
  415.      found.  *Note Comparing Directories::.
  416.  
  417. `--report-identical-files'
  418.      Report when two files are the same.  *Note Comparing Directories::.
  419.  
  420. `-s'
  421.      Report when two files are the same.  *Note Comparing Directories::.
  422.  
  423. `-S FILE'
  424.      When comparing directories, start with the file FILE.  This is
  425.      used for resuming an aborted comparison.  *Note Comparing
  426.      Directories::.
  427.  
  428. `--sdiff-merge-assist'
  429.      Print extra information to help `sdiff'.  `sdiff' uses this option
  430.      when it runs `diff'.  This option is not intended for users to use
  431.      directly.
  432.  
  433. `--show-c-function'
  434.      Show which C function each change is in.  *Note C Function
  435.      Headings::.
  436.  
  437. `--show-function-line=REGEXP'
  438.      In context and unified format, for each hunk of differences, show
  439.      some of the last preceding line that matches REGEXP.  *Note
  440.      Specified Headings::.
  441.  
  442. `--side-by-side'
  443.      Use the side by side output format.  *Note Side by Side Format::.
  444.  
  445. `--speed-large-files'
  446.      Use heuristics to speed handling of large files that have numerous
  447.      scattered small changes.  *Note diff Performance::.
  448.  
  449. `--starting-file=FILE'
  450.      When comparing directories, start with the file FILE.  This is
  451.      used for resuming an aborted comparison.  *Note Comparing
  452.      Directories::.
  453.  
  454. `--suppress-common-lines'
  455.      Do not print common lines in side by side format.  *Note Side by
  456.      Side Format::.
  457.  
  458. `-t'
  459.      Expand tabs to spaces in the output, to preserve the alignment of
  460.      tabs in the input files.  *Note Tabs::.
  461.  
  462. `-T'
  463.      Output a tab rather than a space before the text of a line in
  464.      normal or context format.  This causes the alignment of tabs in
  465.      the line to look normal.  *Note Tabs::.
  466.  
  467. `--text'
  468.      Treat all files as text and compare them line-by-line, even if they
  469.      do not appear to be text.  *Note Binary::.
  470.  
  471. `-u'
  472.      Use the unified output format.  *Note Unified Format::.
  473.  
  474. `--unchanged-group-format=FORMAT'
  475.      Use FORMAT to output a group of common lines taken from both files
  476.      in if-then-else format.  *Note Line Group Formats::.
  477.  
  478. `--unchanged-line-format=FORMAT'
  479.      Use FORMAT to output a line common to both files in if-then-else
  480.      format.  *Note Line Formats::.
  481.  
  482. `--unidirectional-new-file'
  483.      When comparing directories, if a file appears only in the second
  484.      directory of the two, treat it as present but empty in the other.
  485.      *Note Comparing Directories::.
  486.  
  487. `-U LINES'
  488. `--unified[=LINES]'
  489.      Use the unified output format, showing LINES (an integer) lines of
  490.      context, or three if LINES is not given.  *Note Unified Format::.
  491.      For proper operation, `patch' typically needs at least two lines of
  492.      context.
  493.  
  494. `-v'
  495. `--version'
  496.      Output the version number of `diff'.
  497.  
  498. `-w'
  499.      Ignore white space when comparing lines.  *Note White Space::.
  500.  
  501. `-W COLUMNS'
  502. `--width=COLUMNS'
  503.      Use an output width of COLUMNS in side by side format.  *Note Side
  504.      by Side Format::.
  505.  
  506. `-x PATTERN'
  507.      When comparing directories, ignore files and subdirectories whose
  508.      basenames match PATTERN.  *Note Comparing Directories::.
  509.  
  510. `-X FILE'
  511.      When comparing directories, ignore files and subdirectories whose
  512.      basenames match any pattern contained in FILE.  *Note Comparing
  513.      Directories::.
  514.  
  515. `-y'
  516.      Use the side by side output format.  *Note Side by Side Format::.
  517.  
  518. 
  519. File: diff.info,  Node: Invoking diff3,  Next: Invoking patch,  Prev: Invoking diff,  Up: Top
  520.  
  521. Invoking `diff3'
  522. ****************
  523.  
  524.    The `diff3' command compares three files and outputs descriptions of
  525. their differences.  Its arguments are as follows:
  526.  
  527.      diff3 OPTIONS... MINE OLDER YOURS
  528.  
  529.    The files to compare are MINE, OLDER, and YOURS.  At most one of
  530. these three file names may be `-', which tells `diff3' to read the
  531. standard input for that file.
  532.  
  533.    An exit status of 0 means `diff3' was successful, 1 means some
  534. conflicts were found, and 2 means trouble.
  535.  
  536. * Menu:
  537.  
  538. * diff3 Options::        Summary of options to `diff3'.
  539.  
  540. 
  541. File: diff.info,  Node: diff3 Options,  Up: Invoking diff3
  542.  
  543. Options to `diff3'
  544. ==================
  545.  
  546.    Below is a summary of all of the options that GNU `diff3' accepts.
  547. Multiple single letter options (unless they take an argument) can be
  548. combined into a single command line argument.
  549.  
  550. `-a'
  551.      Treat all files as text and compare them line-by-line, even if they
  552.      do not appear to be text.  *Note Binary::.
  553.  
  554. `-A'
  555.      Incorporate all changes from OLDER to YOURS into MINE, surrounding
  556.      all conflicts with bracket lines.  *Note Marking Conflicts::.
  557.  
  558. `-e'
  559.      Generate an `ed' script that incorporates all the changes from
  560.      OLDER to YOURS into MINE.  *Note Which Changes::.
  561.  
  562. `-E'
  563.      Like `-e', except bracket lines from overlapping changes' first
  564.      and third files.  *Note Marking Conflicts::.  With `-e', an
  565.      overlapping change looks like this:
  566.  
  567.           <<<<<<< MINE
  568.           lines from MINE
  569.           =======
  570.           lines from YOURS
  571.           >>>>>>> YOURS
  572.  
  573. `--ed'
  574.      Generate an `ed' script that incorporates all the changes from
  575.      OLDER to YOURS into MINE.  *Note Which Changes::.
  576.  
  577. `--easy-only'
  578.      Like `-e', except output only the nonoverlapping changes.  *Note
  579.      Which Changes::.
  580.  
  581. `-i'
  582.      Generate `w' and `q' commands at the end of the `ed' script for
  583.      System V compatibility.  This option must be combined with one of
  584.      the `-AeExX3' options, and may not be combined with `-m'.  *Note
  585.      Saving the Changed File::.
  586.  
  587. `--initial-tab'
  588.      Output a tab rather than two spaces before the text of a line in
  589.      normal format.  This causes the alignment of tabs in the line to
  590.      look normal.  *Note Tabs::.
  591.  
  592. `-L LABEL'
  593. `--label=LABEL'
  594.      Use the label LABEL for the brackets output by the `-A', `-E' and
  595.      `-X' options.  This option may be given up to three times, one for
  596.      each input file.  The default labels are the names of the input
  597.      files.  Thus `diff3 -L X -L Y -L Z -m A B C' acts like `diff3 -m A
  598.      B C', except that the output looks like it came from files named
  599.      `X', `Y' and `Z' rather than from files named `A', `B' and `C'.
  600.      *Note Marking Conflicts::.
  601.  
  602. `-m'
  603. `--merge'
  604.      Apply the edit script to the first file and send the result to
  605.      standard output.  Unlike piping the output from `diff3' to `ed',
  606.      this works even for binary files and incomplete lines.  `-A' is
  607.      assumed if no edit script option is specified.  *Note Bypassing
  608.      ed::.
  609.  
  610. `--overlap-only'
  611.      Like `-e', except output only the overlapping changes.  *Note
  612.      Which Changes::.
  613.  
  614. `--show-all'
  615.      Incorporate all unmerged changes from OLDER to YOURS into MINE,
  616.      surrounding all overlapping changes with bracket lines.  *Note
  617.      Marking Conflicts::.
  618.  
  619. `--show-overlap'
  620.      Like `-e', except bracket lines from overlapping changes' first
  621.      and third files.  *Note Marking Conflicts::.
  622.  
  623. `-T'
  624.      Output a tab rather than two spaces before the text of a line in
  625.      normal format.  This causes the alignment of tabs in the line to
  626.      look normal.  *Note Tabs::.
  627.  
  628. `--text'
  629.      Treat all files as text and compare them line-by-line, even if they
  630.      do not appear to be text.  *Note Binary::.
  631.  
  632. `-v'
  633. `--version'
  634.      Output the version number of `diff3'.
  635.  
  636. `-x'
  637.      Like `-e', except output only the overlapping changes.  *Note
  638.      Which Changes::.
  639.  
  640. `-X'
  641.      Like `-E', except output only the overlapping changes.  In other
  642.      words, like `-x', except bracket changes as in `-E'.  *Note
  643.      Marking Conflicts::.
  644.  
  645. `-3'
  646.      Like `-e', except output only the nonoverlapping changes.  *Note
  647.      Which Changes::.
  648.  
  649. 
  650. File: diff.info,  Node: Invoking patch,  Next: Invoking sdiff,  Prev: Invoking diff3,  Up: Top
  651.  
  652. Invoking `patch'
  653. ****************
  654.  
  655.    Normally `patch' is invoked like this:
  656.  
  657.      patch <PATCHFILE
  658.  
  659.    The full format for invoking `patch' is:
  660.  
  661.      patch OPTIONS... [ORIGFILE [PATCHFILE]] [+ OPTIONS... [ORIGFILE]]...
  662.  
  663.    If you do not specify PATCHFILE, or if PATCHFILE is `-', `patch'
  664. reads the patch (that is, the `diff' output) from the standard input.
  665.  
  666.    You can specify one or more of the original files as ORIG arguments;
  667. each one and options for interpreting it is separated from the others
  668. with a `+'.  *Note Multiple Patches::, for more information.
  669.  
  670.    If you do not specify an input file on the command line, `patch'
  671. tries to figure out from the "leading text" (any text in the patch that
  672. comes before the `diff' output) which file to edit.  In the header of a
  673. context or unified diff, `patch' looks in lines beginning with `***',
  674. `---', or `+++'; among those, it chooses the shortest name of an
  675. existing file.  Otherwise, if there is an `Index:' line in the leading
  676. text, `patch' tries to use the file name from that line.  If `patch'
  677. cannot figure out the name of an existing file from the leading text,
  678. it prompts you for the name of the file to patch.
  679.  
  680.    If the input file does not exist or is read-only, and a suitable RCS
  681. or SCCS file exists, `patch' attempts to check out or get the file
  682. before proceeding.
  683.  
  684.    By default, `patch' replaces the original input file with the
  685. patched version, after renaming the original file into a backup file
  686. (*note Backups::., for a description of how `patch' names backup
  687. files).  You can also specify where to put the output with the `-o
  688. OUTPUT-FILE' or `--output=OUTPUT-FILE' option.
  689.  
  690. * Menu:
  691.  
  692. * patch Directories::    Changing directory and stripping directories.
  693. * Backups::        Backup file names.
  694. * Rejects::        Reject file names.
  695. * patch Options::    Summary table of options to `patch'.
  696.  
  697. 
  698. File: diff.info,  Node: patch Directories,  Next: Backups,  Up: Invoking patch
  699.  
  700. Applying Patches in Other Directories
  701. =====================================
  702.  
  703.    The `-d DIRECTORY' or `--directory=DIRECTORY' option to `patch'
  704. makes directory DIRECTORY the current directory for interpreting both
  705. file names in the patch file, and file names given as arguments to
  706. other options (such as `-B' and `-o').  For example, while in a news
  707. reading program, you can patch a file in the `/usr/src/emacs' directory
  708. directly from the article containing the patch like this:
  709.  
  710.      | patch -d /usr/src/emacs
  711.  
  712.    Sometimes the file names given in a patch contain leading
  713. directories, but you keep your files in a directory different from the
  714. one given in the patch.  In those cases, you can use the `-p[NUMBER]'
  715. or `--strip[=NUMBER]' option to set the file name strip count to
  716. NUMBER.  The strip count tells `patch' how many slashes, along with the
  717. directory names between them, to strip from the front of file names.
  718. `-p' with no NUMBER given is equivalent to `-p0'.  By default, `patch'
  719. strips off all leading directories, leaving just the base file names,
  720. except that when a file name given in the patch is a relative file name
  721. and all of its leading directories already exist, `patch' does not
  722. strip off the leading directory.  (A "relative" file name is one that
  723. does not start with a slash.)
  724.  
  725.    `patch' looks for each file (after any slashes have been stripped)
  726. in the current directory, or if you used the `-d DIRECTORY' option, in
  727. that directory.
  728.  
  729.    For example, suppose the file name in the patch file is
  730. `/gnu/src/emacs/etc/NEWS'.  Using `-p' or `-p0' gives the entire file
  731. name unmodified, `-p1' gives `gnu/src/emacs/etc/NEWS' (no leading
  732. slash), `-p4' gives `etc/NEWS', and not specifying `-p' at all gives
  733. `NEWS'.
  734.  
  735. 
  736. File: diff.info,  Node: Backups,  Next: Rejects,  Prev: patch Directories,  Up: Invoking patch
  737.  
  738. Backup File Names
  739. =================
  740.  
  741.    Normally, `patch' renames an original input file into a backup file
  742. by appending to its name the extension `.orig', or `~' on systems that
  743. do not support long file names.  The `-b BACKUP-SUFFIX' or
  744. `--suffix=BACKUP-SUFFIX' option uses BACKUP-SUFFIX as the backup
  745. extension instead.
  746.  
  747.    Alternately, you can specify the extension for backup files with the
  748. `SIMPLE_BACKUP_SUFFIX' environment variable, which the options override.
  749.  
  750.    `patch' can also create numbered backup files the way GNU Emacs
  751. does.  With this method, instead of having a single backup of each file,
  752. `patch' makes a new backup file name each time it patches a file.  For
  753. example, the backups of a file named `sink' would be called,
  754. successively, `sink.~1~', `sink.~2~', `sink.~3~', etc.
  755.  
  756.    The `-V BACKUP-STYLE' or `--version-control=BACKUP-STYLE' option
  757. takes as an argument a method for creating backup file names.  You can
  758. alternately control the type of backups that `patch' makes with the
  759. `VERSION_CONTROL' environment variable, which the `-V' option
  760. overrides.  The value of the `VERSION_CONTROL' environment variable and
  761. the argument to the `-V' option are like the GNU Emacs
  762. `version-control' variable (*note emacs: Backups., for more information
  763. on backup versions in Emacs).  They also recognize synonyms that are
  764. more descriptive.  The valid values are listed below; unique
  765. abbreviations are acceptable.
  766.  
  767. `t'
  768. `numbered'
  769.      Always make numbered backups.
  770.  
  771. `nil'
  772. `existing'
  773.      Make numbered backups of files that already have them, simple
  774.      backups of the others.  This is the default.
  775.  
  776. `never'
  777. `simple'
  778.      Always make simple backups.
  779.  
  780.    Alternately, you can tell `patch' to prepend a prefix, such as a
  781. directory name, to produce backup file names.  The `-B BACKUP-PREFIX'
  782. or `--prefix=BACKUP-PREFIX' option makes backup files by prepending
  783. BACKUP-PREFIX to them.  If you use this option, `patch' ignores any
  784. `-b' option that you give.
  785.  
  786.    If the backup file already exists, `patch' creates a new backup file
  787. name by changing the first lowercase letter in the last component of
  788. the file name into uppercase.  If there are no more lowercase letters
  789. in the name, it removes the first character from the name.  It repeats
  790. this process until it comes up with a backup file name that does not
  791. already exist.
  792.  
  793.    If you specify the output file with the `-o' option, that file is
  794. the one that is backed up, not the input file.
  795.  
  796. 
  797. File: diff.info,  Node: Rejects,  Next: patch Options,  Prev: Backups,  Up: Invoking patch
  798.  
  799. Reject File Names
  800. =================
  801.  
  802.    The names for reject files (files containing patches that `patch'
  803. could not find a place to apply) are normally the name of the output
  804. file with `.rej' appended (or `#' on systems that do not support long
  805. file names).
  806.  
  807.    Alternatively, you can tell `patch' to place all of the rejected
  808. patches in a single file.  The `-r REJECT-FILE' or
  809. `--reject-file=REJECT-FILE' option uses REJECT-FILE as the reject file
  810. name.
  811.  
  812. 
  813. File: diff.info,  Node: patch Options,  Prev: Rejects,  Up: Invoking patch
  814.  
  815. Options to `patch'
  816. ==================
  817.  
  818.    Here is a summary of all of the options that `patch' accepts.  Older
  819. versions of `patch' do not accept long-named options or the `-t', `-E',
  820. or `-V' options.
  821.  
  822.    Multiple single-letter options that do not take an argument can be
  823. combined into a single command line argument (with only one dash).
  824. Brackets ([ and ]) indicate that an option takes an optional argument.
  825.  
  826. `-b BACKUP-SUFFIX'
  827.      Use BACKUP-SUFFIX as the backup extension instead of `.orig' or
  828.      `~'.  *Note Backups::.
  829.  
  830. `-B BACKUP-PREFIX'
  831.      Use BACKUP-PREFIX as a prefix to the backup file name.  If this
  832.      option is specified, any `-b' option is ignored.  *Note Backups::.
  833.  
  834. `--batch'
  835.      Do not ask any questions.  *Note patch Messages::.
  836.  
  837. `-c'
  838. `--context'
  839.      Interpret the patch file as a context diff.  *Note patch Input::.
  840.  
  841. `-d DIRECTORY'
  842. `--directory=DIRECTORY'
  843.      Makes directory DIRECTORY the current directory for interpreting
  844.      both file names in the patch file, and file names given as
  845.      arguments to other options.  *Note patch Directories::.
  846.  
  847. `-D NAME'
  848.      Make merged if-then-else output using FORMAT.  *Note
  849.      If-then-else::.
  850.  
  851. `--debug=NUMBER'
  852.      Set internal debugging flags.  Of interest only to `patch'
  853.      patchers.
  854.  
  855. `-e'
  856. `--ed'
  857.      Interpret the patch file as an `ed' script.  *Note patch Input::.
  858.  
  859. `-E'
  860.      Remove output files that are empty after the patches have been
  861.      applied.  *Note Empty Files::.
  862.  
  863. `-f'
  864.      Assume that the user knows exactly what he or she is doing, and do
  865.      not ask any questions.  *Note patch Messages::.
  866.  
  867. `-F LINES'
  868.      Set the maximum fuzz factor to LINES.  *Note Inexact::.
  869.  
  870. `--force'
  871.      Assume that the user knows exactly what he or she is doing, and do
  872.      not ask any questions.  *Note patch Messages::.
  873.  
  874. `--forward'
  875.      Ignore patches that `patch' thinks are reversed or already applied.
  876.      See also `-R'.  *Note Reversed Patches::.
  877.  
  878. `--fuzz=LINES'
  879.      Set the maximum fuzz factor to LINES.  *Note Inexact::.
  880.  
  881. `--help'
  882.      Print a summary of the options that `patch' recognizes, then exit.
  883.  
  884. `--ifdef=NAME'
  885.      Make merged if-then-else output using FORMAT.  *Note
  886.      If-then-else::.
  887.  
  888. `--ignore-white-space'
  889. `-l'
  890.      Let any sequence of white space in the patch file match any
  891.      sequence of white space in the input file.  *Note Changed White
  892.      Space::.
  893.  
  894. `-n'
  895. `--normal'
  896.      Interpret the patch file as a normal diff.  *Note patch Input::.
  897.  
  898. `-N'
  899.      Ignore patches that `patch' thinks are reversed or already applied.
  900.      See also `-R'.  *Note Reversed Patches::.
  901.  
  902. `-o OUTPUT-FILE'
  903. `--output=OUTPUT-FILE'
  904.      Use OUTPUT-FILE as the output file name.  *Note patch Options::.
  905.  
  906. `-p[NUMBER]'
  907.      Set the file name strip count to NUMBER.  *Note patch
  908.      Directories::.
  909.  
  910. `--prefix=BACKUP-PREFIX'
  911.      Use BACKUP-PREFIX as a prefix to the backup file name.  If this
  912.      option is specified, any `-b' option is ignored.  *Note Backups::.
  913.  
  914. `--quiet'
  915.      Work silently unless an error occurs.  *Note patch Messages::.
  916.  
  917. `-r REJECT-FILE'
  918.      Use REJECT-FILE as the reject file name.  *Note Rejects::.
  919.  
  920. `-R'
  921.      Assume that this patch was created with the old and new files
  922.      swapped.  *Note Reversed Patches::.
  923.  
  924. `--reject-file=REJECT-FILE'
  925.      Use REJECT-FILE as the reject file name.  *Note Rejects::.
  926.  
  927. `--remove-empty-files'
  928.      Remove output files that are empty after the patches have been
  929.      applied.  *Note Empty Files::.
  930.  
  931. `--reverse'
  932.      Assume that this patch was created with the old and new files
  933.      swapped.  *Note Reversed Patches::.
  934.  
  935. `-s'
  936.      Work silently unless an error occurs.  *Note patch Messages::.
  937.  
  938. `-S'
  939.      Ignore this patch from the patch file, but continue looking for
  940.      the next patch in the file.  *Note Multiple Patches::.
  941.  
  942. `--silent'
  943.      Work silently unless an error occurs.  *Note patch Messages::.
  944.  
  945. `--skip'
  946.      Ignore this patch from the patch file, but continue looking for
  947.      the next patch in the file.  *Note Multiple Patches::.
  948.  
  949. `--strip[=NUMBER]'
  950.      Set the file name strip count to NUMBER.  *Note patch
  951.      Directories::.
  952.  
  953. `--suffix=BACKUP-SUFFIX'
  954.      Use BACKUP-SUFFIX as the backup extension instead of `.orig' or
  955.      `~'.  *Note Backups::.
  956.  
  957. `-t'
  958.      Do not ask any questions.  *Note patch Messages::.
  959.  
  960. `-u'
  961. `--unified'
  962.      Interpret the patch file as a unified diff.  *Note patch Input::.
  963.  
  964. `-v'
  965.      Output the revision header and patch level of `patch'.
  966.  
  967. `-V BACKUP-STYLE'
  968.      Select the kind of backups to make.  *Note Backups::.
  969.  
  970. `--version'
  971.      Output the revision header and patch level of `patch', then exit.
  972.  
  973. `--version=control=BACKUP-STYLE'
  974.      Select the kind of backups to make.  *Note Backups::.
  975.  
  976. `-x NUMBER'
  977.      Set internal debugging flags.  Of interest only to `patch'
  978.      patchers.
  979.  
  980. 
  981. File: diff.info,  Node: Invoking sdiff,  Next: Incomplete Lines,  Prev: Invoking patch,  Up: Top
  982.  
  983. Invoking `sdiff'
  984. ****************
  985.  
  986.    The `sdiff' command merges two files and interactively outputs the
  987. results.  Its arguments are as follows:
  988.  
  989.      sdiff -o OUTFILE OPTIONS... FROM-FILE TO-FILE
  990.  
  991.    This merges FROM-FILE with TO-FILE, with output to OUTFILE.  If
  992. FROM-FILE is a directory and TO-FILE is not, `sdiff' compares the file
  993. in FROM-FILE whose file name is that of TO-FILE, and vice versa.
  994. fROM-FILE and TO-FILE may not both be directories.
  995.  
  996.    `sdiff' options begin with `-', so normally FROM-FILE and TO-FILE
  997. may not begin with `-'.  However, `--' as an argument by itself treats
  998. the remaining arguments as file names even if they begin with `-'.  You
  999. may not use `-' as an input file.
  1000.  
  1001.    An exit status of 0 means no differences were found, 1 means some
  1002. differences were found, and 2 means trouble.
  1003.  
  1004.    `sdiff' without `-o' (or `--output') produces a side-by-side
  1005. difference.  This usage is obsolete; use `diff --side-by-side' instead.
  1006.  
  1007. * Menu:
  1008.  
  1009. * sdiff Options::    Summary of options to `diff'.
  1010.  
  1011. 
  1012. File: diff.info,  Node: sdiff Options,  Up: Invoking sdiff
  1013.  
  1014. Options to `sdiff'
  1015. ==================
  1016.  
  1017.    Below is a summary of all of the options that GNU `sdiff' accepts.
  1018. Each option has two equivalent names, one of which is a single letter
  1019. preceded by `-', and the other of which is a long name preceded by
  1020. `--'.  Multiple single letter options (unless they take an argument)
  1021. can be combined into a single command line argument.  Long named
  1022. options can be abbreviated to any unique prefix of their name.
  1023.  
  1024. `-a'
  1025.      Treat all files as text and compare them line-by-line, even if they
  1026.      do not appear to be text.  *Note Binary::.
  1027.  
  1028. `-b'
  1029.      Ignore changes in amount of white space.  *Note White Space::.
  1030.  
  1031. `-B'
  1032.      Ignore changes that just insert or delete blank lines.  *Note
  1033.      Blank Lines::.
  1034.  
  1035. `-d'
  1036.      Change the algorithm to perhaps find a smaller set of changes.
  1037.      This makes `sdiff' slower (sometimes much slower).  *Note diff
  1038.      Performance::.
  1039.  
  1040. `-H'
  1041.      Use heuristics to speed handling of large files that have numerous
  1042.      scattered small changes.  *Note diff Performance::.
  1043.  
  1044. `--expand-tabs'
  1045.      Expand tabs to spaces in the output, to preserve the alignment of
  1046.      tabs in the input files.  *Note Tabs::.
  1047.  
  1048. `-i'
  1049.      Ignore changes in case; consider upper- and lower-case to be the
  1050.      same.  *Note Case Folding::.
  1051.  
  1052. `-I REGEXP'
  1053.      Ignore changes that just insert or delete lines that match REGEXP.
  1054.      *Note Specified Folding::.
  1055.  
  1056. `--ignore-all-space'
  1057.      Ignore white space when comparing lines.  *Note White Space::.
  1058.  
  1059. `--ignore-blank-lines'
  1060.      Ignore changes that just insert or delete blank lines.  *Note
  1061.      Blank Lines::.
  1062.  
  1063. `--ignore-case'
  1064.      Ignore changes in case; consider upper- and lower-case to be the
  1065.      same.  *Note Case Folding::.
  1066.  
  1067. `--ignore-matching-lines=REGEXP'
  1068.      Ignore changes that just insert or delete lines that match REGEXP.
  1069.      *Note Specified Folding::.
  1070.  
  1071. `--ignore-space-change'
  1072.      Ignore changes in amount of white space.  *Note White Space::.
  1073.  
  1074. `-l'
  1075. `--left-column'
  1076.      Print only the left column of two common lines.  *Note Side by
  1077.      Side Format::.
  1078.  
  1079. `--minimal'
  1080.      Change the algorithm to perhaps find a smaller set of changes.
  1081.      This makes `sdiff' slower (sometimes much slower).  *Note diff
  1082.      Performance::.
  1083.  
  1084. `-o FILE'
  1085. `--output=FILE'
  1086.      Put merged output into FILE.  This option is required for merging.
  1087.  
  1088. `-s'
  1089. `--suppress-common-lines'
  1090.      Do not print common lines.  *Note Side by Side Format::.
  1091.  
  1092. `--speed-large-files'
  1093.      Use heuristics to speed handling of large files that have numerous
  1094.      scattered small changes.  *Note diff Performance::.
  1095.  
  1096. `-t'
  1097.      Expand tabs to spaces in the output, to preserve the alignment of
  1098.      tabs in the input files.  *Note Tabs::.
  1099.  
  1100. `--text'
  1101.      Treat all files as text and compare them line-by-line, even if they
  1102.      do not appear to be text.  *Note Binary::.
  1103.  
  1104. `-v'
  1105. `--version'
  1106.      Output the version number of `sdiff'.
  1107.  
  1108. `-w COLUMNS'
  1109. `--width=COLUMNS'
  1110.      Use an output width of COLUMNS.  *Note Side by Side Format::.
  1111.      Note that for historical reasons, this option is `-W' in `diff',
  1112.      `-w' in `sdiff'.
  1113.  
  1114. `-W'
  1115.      Ignore horizontal white space when comparing lines.  *Note White
  1116.      Space::.  Note that for historical reasons, this option is `-w' in
  1117.      `diff', `-W' in `sdiff'.
  1118.  
  1119. 
  1120. File: diff.info,  Node: Incomplete Lines,  Next: Projects,  Prev: Invoking sdiff,  Up: Top
  1121.  
  1122. Incomplete Lines
  1123. ****************
  1124.  
  1125.    When an input file ends in a non-newline character, its last line is
  1126. called an "incomplete line" because its last character is not a
  1127. newline.  All other lines are called "full lines" and end in a newline
  1128. character.  Incomplete lines do not match full lines unless differences
  1129. in white space are ignored (*note White Space::.).
  1130.  
  1131.    An incomplete line is normally distinguished on output from a full
  1132. line by a following line that starts with `\'.  However, the RCS format
  1133. (*note RCS::.) outputs the incomplete line as-is, without any trailing
  1134. newline or following line.  The side by side format normally represents
  1135. incomplete lines as-is, but in some cases uses a `\' or `/' gutter
  1136. marker; *Note Side by Side::.  The if-then-else line format preserves a
  1137. line's incompleteness with `%L', and discards the newline with `%l';
  1138. *Note Line Formats::.  Finally, with the `ed' and forward `ed' output
  1139. formats (*note Output Formats::.) `diff' cannot represent an incomplete
  1140. line, so it pretends there was a newline and reports an error.
  1141.  
  1142.    For example, suppose `F' and `G' are one-byte files that contain
  1143. just `f' and `g', respectively.  Then `diff F G' outputs
  1144.  
  1145.      1c1
  1146.      < f
  1147.      \ No newline at end of file
  1148.      ---
  1149.      > g
  1150.      \ No newline at end of file
  1151.  
  1152. (The exact message may differ in non-English locales.) `diff -n F G'
  1153. outputs the following without a trailing newline:
  1154.  
  1155.      d1 1
  1156.      a1 1
  1157.      g
  1158.  
  1159.    `diff -e F G' reports two errors and outputs the following:
  1160.  
  1161.      1c
  1162.      g
  1163.      .
  1164.  
  1165. 
  1166. File: diff.info,  Node: Projects,  Next: Concept Index,  Prev: Incomplete Lines,  Up: Top
  1167.  
  1168. Future Projects
  1169. ***************
  1170.  
  1171.    Here are some ideas for improving GNU `diff' and `patch'.  The GNU
  1172. project has identified some improvements as potential programming
  1173. projects for volunteers.  You can also help by reporting any bugs that
  1174. you find.
  1175.  
  1176.    If you are a programmer and would like to contribute something to the
  1177. GNU project, please consider volunteering for one of these projects.  If
  1178. you are seriously contemplating work, please write to
  1179. `gnu@prep.ai.mit.edu' to coordinate with other volunteers.
  1180.  
  1181. * Menu:
  1182.  
  1183. * Shortcomings::    Suggested projects for improvements.
  1184. * Bugs::        Reporting bugs.
  1185.  
  1186. 
  1187. File: diff.info,  Node: Shortcomings,  Next: Bugs,  Up: Projects
  1188.  
  1189. Suggested Projects for Improving GNU `diff' and `patch'
  1190. =======================================================
  1191.  
  1192.    One should be able to use GNU `diff' to generate a patch from any
  1193. pair of directory trees, and given the patch and a copy of one such
  1194. tree, use `patch' to generate a faithful copy of the other.
  1195. Unfortunately, some changes to directory trees cannot be expressed using
  1196. current patch formats; also, `patch' does not handle some of the
  1197. existing formats.  These shortcomings motivate the following suggested
  1198. projects.
  1199.  
  1200. * Menu:
  1201.  
  1202. * Changing Structure::    Handling changes to the directory structure.
  1203. * Special Files::    Handling symbolic links, device special files, etc.
  1204. * Unusual File Names::    Handling file names that contain unusual characters.
  1205. * Arbitrary Limits::    Patching non-text files.
  1206. * Large Files::        Handling files that do not fit in memory.
  1207. * Ignoring Changes::    Ignoring certain changes while showing others.
  1208.  
  1209. 
  1210. File: diff.info,  Node: Changing Structure,  Next: Special Files,  Up: Shortcomings
  1211.  
  1212. Handling Changes to the Directory Structure
  1213. -------------------------------------------
  1214.  
  1215.    `diff' and `patch' do not handle some changes to directory
  1216. structure.  For example, suppose one directory tree contains a directory
  1217. named `D' with some subsidiary files, and another contains a file with
  1218. the same name `D'.  `diff -r' does not output enough information for
  1219. `patch' to transform the the directory subtree into the file.
  1220.  
  1221.    There should be a way to specify that a file has been deleted without
  1222. having to include its entire contents in the patch file.  There should
  1223. also be a way to tell `patch' that a file was renamed, even if there is
  1224. no way for `diff' to generate such information.
  1225.  
  1226.    These problems can be fixed by extending the `diff' output format to
  1227. represent changes in directory structure, and extending `patch' to
  1228. understand these extensions.
  1229.  
  1230. 
  1231. File: diff.info,  Node: Special Files,  Next: Unusual File Names,  Prev: Changing Structure,  Up: Shortcomings
  1232.  
  1233. Files that are Neither Directories Nor Regular Files
  1234. ----------------------------------------------------
  1235.  
  1236.    Some files are neither directories nor regular files: they are
  1237. unusual files like symbolic links, device special files, named pipes,
  1238. and sockets.  Currently, `diff' treats symbolic links like regular
  1239. files; it treats other special files like regular files if they are
  1240. specified at the top level, but simply reports their presence when
  1241. comparing directories.  This means that `patch' cannot represent changes
  1242. to such files.  For example, if you change which file a symbolic link
  1243. points to, `diff' outputs the difference between the two files, instead
  1244. of the change to the symbolic link.
  1245.  
  1246.    `diff' should optionally report changes to special files specially,
  1247. and `patch' should be extended to understand these extensions.
  1248.  
  1249. 
  1250. File: diff.info,  Node: Unusual File Names,  Next: Arbitrary Limits,  Prev: Special Files,  Up: Shortcomings
  1251.  
  1252. File Names that Contain Unusual Characters
  1253. ------------------------------------------
  1254.  
  1255.    When a file name contains an unusual character like a newline or
  1256. white space, `diff -r' generates a patch that `patch' cannot parse.
  1257. The problem is with format of `diff' output, not just with `patch',
  1258. because with odd enough file names one can cause `diff' to generate a
  1259. patch that is syntactically correct but patches the wrong files.  The
  1260. format of `diff' output should be extended to handle all possible file
  1261. names.
  1262.  
  1263. 
  1264. File: diff.info,  Node: Arbitrary Limits,  Next: Large Files,  Prev: Unusual File Names,  Up: Shortcomings
  1265.  
  1266. Arbitrary Limits
  1267. ----------------
  1268.  
  1269.    GNU `diff' can analyze files with arbitrarily long lines and files
  1270. that end in incomplete lines.  However, `patch' cannot patch such
  1271. files.  The `patch' internal limits on line lengths should be removed,
  1272. and `patch' should be extended to parse `diff' reports of incomplete
  1273. lines.
  1274.  
  1275. 
  1276. File: diff.info,  Node: Large Files,  Next: Ignoring Changes,  Prev: Arbitrary Limits,  Up: Shortcomings
  1277.  
  1278. Handling Files that Do Not Fit in Memory
  1279. ----------------------------------------
  1280.  
  1281.    `diff' operates by reading both files into memory.  This method
  1282. fails if the files are too large, and `diff' should have a fallback.
  1283.  
  1284.    One way to do this is to scan the files sequentially to compute hash
  1285. codes of the lines and put the lines in equivalence classes based only
  1286. on hash code.  Then compare the files normally.  This does produce some
  1287. false matches.
  1288.  
  1289.    Then scan the two files sequentially again, checking each match to
  1290. see whether it is real.  When a match is not real, mark both the
  1291. "matching" lines as changed.  Then build an edit script as usual.
  1292.  
  1293.    The output routines would have to be changed to scan the files
  1294. sequentially looking for the text to print.
  1295.  
  1296. 
  1297. File: diff.info,  Node: Ignoring Changes,  Prev: Large Files,  Up: Shortcomings
  1298.  
  1299. Ignoring Certain Changes
  1300. ------------------------
  1301.  
  1302.    It would be nice to have a feature for specifying two strings, one in
  1303. FROM-FILE and one in TO-FILE, which should be considered to match.
  1304. Thus, if the two strings are `foo' and `bar', then if two lines differ
  1305. only in that `foo' in file 1 corresponds to `bar' in file 2, the lines
  1306. are treated as identical.
  1307.  
  1308.    It is not clear how general this feature can or should be, or what
  1309. syntax should be used for it.
  1310.  
  1311. 
  1312. File: diff.info,  Node: Bugs,  Prev: Shortcomings,  Up: Projects
  1313.  
  1314. Reporting Bugs
  1315. ==============
  1316.  
  1317.    If you think you have found a bug in GNU `cmp', `diff', `diff3',
  1318. `sdiff', or `patch', please report it by electronic mail to
  1319. `bug-gnu-utils@prep.ai.mit.edu'.  Send as precise a description of the
  1320. problem as you can, including sample input files that produce the bug,
  1321. if applicable.
  1322.  
  1323.    Because Larry Wall has not released a new version of `patch' since
  1324. mid 1988 and the GNU version of `patch' has been changed since then,
  1325. please send bug reports for `patch' by electronic mail to both
  1326. `bug-gnu-utils@prep.ai.mit.edu' and `lwall@netlabs.com'.
  1327.  
  1328.